package com.gxa.hualian.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.*;
import java.io.IOException;

/**
 * @WebFilter 用于在服务器中配置Filter
 * filterName:起名字
 * urlPatterns:指定过滤器拦截的目标资源
 *      /user:只会拦截.user的请求
 *      /*:拦截所有资源(包括前端请求)
 *
 *实现过滤器只需要实现 Filter接口即可
 * 只需要实现三个方法;
 * init:初始化方法
 * doFilter:过滤器的核心操作,把验证的逻辑放在这里
 *      req和resp不是基于http,是HttpServletRequest/Response的父类
 *      FilterChain:过滤器链对象(责任链模式)
 *       chain.doFilter(request, response);表示在当前的过滤器中放行,如果执行不了,就会导致过滤器彻底拦死
 *       destroy:销毁方法
 *
 *在该过滤器中,指定统一的字符集编码格式
 * @author Administrator
 */
@WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")
public class EncodingFilter implements Filter {
    @Override
    public void init(FilterConfig config) throws ServletException {
        System.out.println("过滤器执行了初始方法");
    }

    @Override
    public void destroy() {
        System.out.println("过滤器执行了销毁方法");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
//        System.out.println("字符集过滤器开始工作了...");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
//        //req 和 resp 通过过滤链传递给下一个Filter
//        //最终,所有的过滤器都放行,他们会被下转型为HTTPServletResquest和Response传递给Servlet
        chain.doFilter(request, response);
//        System.out.println("字符集过滤器完成了放行");
    }
}
